package com.jtpay.sdk.util;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;

import com.channel.test.DaoMaster;
import com.channel.test.DaoSession;
import com.jtpay.sdk.BuildConfig;
import com.jtpay.sdk.jtpay.PayUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * global file
 * Created by Steven on 2017/4/15
 */

public class GlobalUtil {
    public SQLiteDatabase db;
    public DaoSession daoSession;
    private PayUtil mPayUtil;
    private List<Activity> mActivities;

    private GlobalUtil() {
        mActivities = new ArrayList<>();
        mPayUtil = new PayUtil();
        setupDataBase();
    }

    private static final class Holder {
        private static final GlobalUtil INSTANCE = new GlobalUtil();
    }

    public static GlobalUtil getInstance() {
        return Holder.INSTANCE;
    }

    private void setupDataBase() {
        // 通过 DaoMaster 的内部类 DevOpenHelper，你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了，你并不需要去编写「CREATE TABLE」这样的 SQL 语句，因为 greenDAO 已经帮你做了。
        // 注意：默认的 DaoMaster.DevOpenHelper 会在数据库升级时，删除所有的表，意味着这将导致数据的丢失。
        // 所以，在正式的项目中，你还应该做一层封装，来实现数据库的安全升级。
        //创建数据库
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(ContextUtil.getContext(), BuildConfig.dbName, null);
        //得到数据库连接对象
        db = helper.getWritableDatabase();
        // 注意：该数据库连接属于 DaoMaster，所以多个 Session 指的是相同的数据库连接。
        DaoMaster daoMaster = new DaoMaster(db);
        //得到daoSession对象
        daoSession = daoMaster.newSession();
        DbUtils.createDir(DbUtils.SDPATHHome);
        DbUtils.createDir(DbUtils.SDPath);
    }

    public SQLiteDatabase getSQLiteDatabase() {
        return db;
    }

    public DaoSession getDaoSession() {
        return daoSession;
    }

    public PayUtil getPayUtil() {
        return mPayUtil;
    }

    public void addActivity(Activity activity) {
        mActivities.add(activity);
    }

    public void exit() {
        for (Activity activity : mActivities) {
            activity.finish();
        }
        System.exit(0);
    }
}
